#include "ESP01s_Control.h"
volatile uint8_t ESP_index = 0;
volatile ESP_State_t ESP_state = ESP_state_START;

/*
//	AT回复的标准格式：
//	AT\r\n
//	\r\n
//	OK\r\n

//	USART_SendString(&USART2_Cfg, "ATE0\r\n");  			// 关闭回显

//  链接热点
//		失败代码：
//			中间响应（阶段失败）
//				1 链接超时
//				2 密码错误
//				3 找不到目标AP
//				4 其它错误
//			最终响应（完全失败）
//				FAIL
//		成功代码：
//			中间响应
//				WIFI CONNECTED
//				WIFI GOT IP
//				ok
//			最终响应
//				FAIL

*/

/*
// 阿里云：/root/3th/9080/stm32_-project/01_test/02_Server_ESP01_chat/Server
// <记得开热点>
*/
void ESP_StControl(void) {
	USART_printf(&USART1_Cfg, "[TEST]ESP_stindex: %d\r\n", ESP_index);
	
	const char* start_cmd[] = {
		"AT\r\n",
		"AT+CWMODE_DEF=1\r\n",
		"AT+CWJAP_DEF=\"yang\",\"12345678\"\r\n",
		"AT+CIPSTART=\"TCP\",\"47.111.20.8\",9080\r\n",	
		"AT+CIPMODE=1\r\n",
		"AT+CIPSEND\r\n", 
		NULL,
	};
	
	if(start_cmd[ESP_index] != NULL) {
		USART_SendString(&USART2_Cfg, start_cmd[ESP_index]); 
		ESP_index++;
	}
	else{
		USART_printf(&USART1_Cfg, "[TEST]Enter TRANSPARENT Mode\r\n");
		ESP_state = ESP_STATE_TRANSPARENT;
		ESP_SendPacket();
	}
}

void ESP_EdControl(void){
	USART_printf(&USART1_Cfg, "[TEST]ESP_edindex, %d\r\n", ESP_index);
	
	const char* end_cmd[] = {
		"+++\r",
		"AT+CIPMODE=0\r\n",
		"AT+CIPCLOSE\r\n",
		NULL,
	};
	
	if(end_cmd[ESP_index] != NULL) {
		USART_SendString(&USART2_Cfg, end_cmd[ESP_index]); 
		ESP_index++;
	}
	else{
		USART_printf(&USART1_Cfg, "[TEST]Connect Broken\r\n");
	}
}

/*
STATUS:2​​ : 已连接WiFi，未连接服务器
​​STATUS:3​​ : 已连接TCP服务器
​​STATUS:5​​ : 透传模式激活
*/
void ESP_Status(void){
	USART_SendString(&USART2_Cfg, "AT+CIPSTATUS\r\n");	// 查询链接状态
}

void ESP_SendPacket(void) {
    char payload[MAX_STR_LEN];
    snprintf(payload, sizeof(payload), "Keep-alive|SYSTICK: %lu|FreeRTOS", 
            (unsigned long)xTaskGetTickCount() * portTICK_PERIOD_MS);

//    if(ESP_state == ESP_STATE_TRANSPARENT) {
    USART_SendString(&USART2_Cfg, payload);
//    } else {
//		ESP_index = 0;
//        ESP_StControl();
//    }
}
